/**
 * TODO
 * 
 * → Créer les attributs de la classe
 * → Créer les getter setter
 * → Créer un constructeur qui va bien
 * → Methode d'initialisation de la classe (fait appel à XMLParser (CF le main de XMLParser))
 * → Créer les méthodes 'métier' (qui moulinent) selon le sujet du TP 
 * 
 * 
 * Note : 
 * Cette classe sera un attribut de la vue (vue.FenetrePrincipale)
 * Si tu fais de la javadoc c'est mieux (devant les fonctions)
 * Le gras, c'est la vie
 * Comme on est dans le package controleur, il faut importer les classes qui se trouvent dans les autres package
 * Si tu veux une instance de Personne, par exemple, il faut 'import modele.Personne'
 * Tu peux faire ça à la souris quand tu déclare un objet du type que tu veux importer
 * 
 * 
 * Parcours de listes d'objets :
 * 
 * → synthaxe for each : 
 * 
 * for(Element e : ListeDElement)
 * {
 * 		e.faiscequetuveux()
 * }
 * 
 * → parcours d'objets
 * 
 * Je veux tester si une personne donnée en paramètre est dans un batiment
 * 
 * public boolean estDansUnBatiment(Personne p1)
 * {
 * 		// Je boucle sur mes batiments (d'accès controleur)
 * 		for(Batiment b : this.getBatiments)
 * 		{
 * 			// Je boucle sur les personnes contenus dans tout les batiments
 * 			for(Personne p2 : b.getPersonnes)
 * 			{
 * 				//Je peux faire mon test
 * 				if(p1==p2)
 * 				{
 * 					return true;
 * 				}
 * 				// Je peux aller plus loin, et regarder si la personne a le droit d'être dnas le batiment
 * 				// Du coup, faut que je boucle sur tout les batiments de la liste de batiments de son badge
 * 				for(Batiment b2 : p1.getBadge().getBatiments())
 * 				{
 * 					if(b2==b)
 * 					{
 * 						return true;
 * 					}
 * 				}
 * 			}
 * 			return false;
 * 		}
 * }
 */

package controleur;

import java.util.ArrayList;

import DB.Personne;

import modele.Badge;
import modele.Batiment;
import modele.Journal;
import modele.XMLParser;

public class AccesControleur {
	
	private Badge badge;
	private ArrayList<Batiment> batiments;
	private Journal journal;
	private ArrayList<Personne> personnes;
	private XMLParser xml;
	private boolean alarme=false;
	
	public AccesControleur()
	{
		this.initialiseSysteme();
	}
	/**
	 * Fonction qui permet d'initialiser le système avec les informations contenues dans le fichier donnees.xml
	 */
	private void initialiseSysteme()
	{
		this.journal=new Journal();
		this.xml = new XMLParser();
		this.setBatiments(this.xml.getBatiments());
		this.setPersonnes(this.xml.getPersonnes());
	}
	
	
	 public boolean estDansBatiment(Personne p1)
	  {
	  		// Je boucle sur mes batiments (d'accès controleur)
	  		for(Batiment b : this.getBatiments())
	  		{
	  			// Je boucle sur les personnes contenus dans tout les batiments
	  			for(Personne p2 : b.getPersonnes())
	  			{
	  				//Je peux faire mon test
	  				if(p1==p2)
	  				{
	  					return true;
	  				}
	  			}
	  		}
	  		return false;
	  }
	 
	 public boolean aDroit (Personne p, Batiment b){
		 if(alarme)
		 {
			 return true;
		 }
		 for(Batiment b2 : p.getBadge().getBatiment())
		 {
			 if(b.getID().equals(b2.getID()))
			 {
				 return true;
			 }
		 }
		return false;
	 }
	 
	 public void rentre (Personne p, Batiment b){
		 
		 b.addPersonnes(p);
		 this.journal.nouvelAccesEntree(p,b);
	 }
	 
	 public void sort (Personne p, Batiment b){
		 
		 b.removePersonne(p);
		 this.journal.nouvelAccesSortie(p,b);
		 
	 }
	 
	/**
	 * @return the badge
	 */
	public Badge getBadge() {
		return badge;
	}

	/**
	 * @param badge the badge to set
	 */
	public void setBadge(Badge badge) {
		this.badge = badge;
	}
	
	/**
	 * @return the batiments
	 */
	public ArrayList<Batiment> getBatiments() {
		return batiments;
	}
	/**
	 * @param batiments the batiments to set
	 */
	public void setBatiments(ArrayList<Batiment> batiments) {
		this.batiments = batiments;
	}
	

	/**
	 * @return the personnes
	 */
	public ArrayList<Personne> getPersonnes() {
		return personnes;
	}
	/**
	 * @param personnes the personnes to set
	 */
	public void setPersonnes(ArrayList<Personne> personnes) {
		this.personnes = personnes;
	}
	/**
	 * @return the journal
	 */
	public Journal getJournal() {
		return journal;
	}
	/**
	 * @param journal the journal to set
	 */
	public void setJournal(Journal journal) {
		this.journal = journal;
	}
	/**
	 * @return the alarme
	 */
	public boolean isAlarme() {
		return alarme;
	}
	/**
	 * @param alarme the alarme to set
	 */
	public void setAlarme(boolean alarme) {
		this.alarme = alarme;
	}
	
	public static void main (String[] args){
		AccesControleur ac = new AccesControleur();
		/*for(Personne p : ac.getPersonnes()){
			ac.getBatiments().get(1).addPeronnes(p);
			//System.out.println(p.toString());
		}*/
		if(ac.aDroit(ac.getPersonnes().get(1),ac.getBatiments().get(1)))
		{
			System.out.println(ac.getPersonnes().get(1).getNom()+" est rentré dans le batiment "+ac.getBatiments().get(1).getNom());

		}
		else {
			System.out.println("Dans le cul mon jeanjean");
		}

	}
	
}
